NetworkManagerHUD

NetworkManagerHUD提供用于控制游戏的网络状态的默认用户界面。它还显示有关编辑器中NetworkManager当前状态的信息。

这是作为开发和测试的辅助工具提供的,并不打算包含在已发布的游戏中。

属性

属性 功能
showGUI 标志显示默认UI。
offsetX UI的水平像素偏移量。
offsetY UI的垂直像素偏移量

细节

NetworkManagerHUD允许您在编辑器中查看许多细节,例如连接,已知网络对象列表和活动玩家对象。

源码

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using UnityEngine.Networking.Match;
    namespace UnityEngine.Networking
    {
        [EditorBrowsable(EditorBrowsableState.Never), AddComponentMenu("Network/NetworkManagerHUD"), RequireComponent(typeof(NetworkManager))]
        public class NetworkManagerHUD : MonoBehaviour
        {
            public NetworkManager manager;
            [SerializeField]
            public bool showGUI = true;
            [SerializeField]
            public int offsetX;
            [SerializeField]
            public int offsetY;
            private bool m_ShowServer;
            private void Awake()
            {
                this.manager = base.GetComponent<NetworkManager>();
            }
            private void Update()
            {
                if (!this.showGUI)
                {
                    return;
                }
                if (!this.manager.IsClientConnected() && !NetworkServer.active && this.manager.matchMaker == null)
                {
                    if (Application.platform != RuntimePlatform.WebGLPlayer)
                    {
                        if (Input.GetKeyDown(KeyCode.S))
                        {
                            this.manager.StartServer();
                        }
                        if (Input.GetKeyDown(KeyCode.H))
                        {
                            this.manager.StartHost();
                        }
                    }
                    if (Input.GetKeyDown(KeyCode.C))
                    {
                        this.manager.StartClient();
                    }
                }
                if (NetworkServer.active && this.manager.IsClientConnected() && Input.GetKeyDown(KeyCode.X))
                {
                    this.manager.StopHost();
                }
            }
            private void OnGUI()
            {
                if (!this.showGUI)
                {
                    return;
                }
                int num = 10 + this.offsetX;
                int num2 = 40 + this.offsetY;
                bool flag = this.manager.client == null || this.manager.client.connection == null || this.manager.client.connection.connectionId == -1;
                if (!this.manager.IsClientConnected() && !NetworkServer.active && this.manager.matchMaker == null)
                {
                    if (flag)
                    {
                        if (Application.platform != RuntimePlatform.WebGLPlayer)
                        {
                            if (GUI.Button(new Rect((float)num, (float)num2, 200f, 20f), "LAN Host(H)"))
                            {
                                this.manager.StartHost();
                            }
                            num2 += 24;
                        }
                        if (GUI.Button(new Rect((float)num, (float)num2, 105f, 20f), "LAN Client(C)"))
                        {
                            this.manager.StartClient();
                        }
                        this.manager.networkAddress = GUI.TextField(new Rect((float)(num + 100), (float)num2, 95f, 20f), this.manager.networkAddress);
                        num2 += 24;
                        if (Application.platform == RuntimePlatform.WebGLPlayer)
                        {
                            GUI.Box(new Rect((float)num, (float)num2, 200f, 25f), "(  WebGL cannot be server  )");
                            num2 += 24;
                        }
                        else
                        {
                            if (GUI.Button(new Rect((float)num, (float)num2, 200f, 20f), "LAN Server Only(S)"))
                            {
                                this.manager.StartServer();
                            }
                            num2 += 24;
                        }
                    }
                    else
                    {
                        GUI.Label(new Rect((float)num, (float)num2, 200f, 20f), string.Concat(new object[]
                        {
                            "Connecting to ",
                            this.manager.networkAddress,
                            ":",
                            this.manager.networkPort,
                            ".."
                        }));
                        num2 += 24;
                        if (GUI.Button(new Rect((float)num, (float)num2, 200f, 20f), "Cancel Connection Attempt"))
                        {
                            this.manager.StopClient();
                        }
                    }
                }
                else
                {
                    if (NetworkServer.active)
                    {
                        string text = "Server: port=" + this.manager.networkPort;
                        if (this.manager.useWebSockets)
                        {
                            text += " (Using WebSockets)";
                        }
                        GUI.Label(new Rect((float)num, (float)num2, 300f, 20f), text);
                        num2 += 24;
                    }
                    if (this.manager.IsClientConnected())
                    {
                        GUI.Label(new Rect((float)num, (float)num2, 300f, 20f), string.Concat(new object[]
                        {
                            "Client: address=",
                            this.manager.networkAddress,
                            " port=",
                            this.manager.networkPort
                        }));
                        num2 += 24;
                    }
                }
                if (this.manager.IsClientConnected() && !ClientScene.ready)
                {
                    if (GUI.Button(new Rect((float)num, (float)num2, 200f, 20f), "Client Ready"))
                    {
                        ClientScene.Ready(this.manager.client.connection);
                        if (ClientScene.localPlayers.Count == 0)
                        {
                            ClientScene.AddPlayer(0);
                        }
                    }
                    num2 += 24;
                }
                if (NetworkServer.active || this.manager.IsClientConnected())
                {
                    if (GUI.Button(new Rect((float)num, (float)num2, 200f, 20f), "Stop (X)"))
                    {
                        this.manager.StopHost();
                    }
                    num2 += 24;
                }
                if (!NetworkServer.active && !this.manager.IsClientConnected() && flag)
                {
                    num2 += 10;
                    if (Application.platform == RuntimePlatform.WebGLPlayer)
                    {
                        GUI.Box(new Rect((float)(num - 5), (float)num2, 220f, 25f), "(WebGL cannot use Match Maker)");
                        return;
                    }
                    if (this.manager.matchMaker == null)
                    {
                        if (GUI.Button(new Rect((float)num, (float)num2, 200f, 20f), "Enable Match Maker (M)"))
                        {
                            this.manager.StartMatchMaker();
                        }
                        num2 += 24;
                    }
                    else
                    {
                        if (this.manager.matchInfo == null)
                        {
                            if (this.manager.matches == null)
                            {
                                if (GUI.Button(new Rect((float)num, (float)num2, 200f, 20f), "Create Internet Match"))
                                {
                                    this.manager.matchMaker.CreateMatch(this.manager.matchName, this.manager.matchSize, true, string.Empty, string.Empty, string.Empty, 0, 0, new NetworkMatch.DataResponseDelegate<MatchInfo>(this.manager.OnMatchCreate));
                                }
                                num2 += 24;
                                GUI.Label(new Rect((float)num, (float)num2, 100f, 20f), "Room Name:");
                                this.manager.matchName = GUI.TextField(new Rect((float)(num + 100), (float)num2, 100f, 20f), this.manager.matchName);
                                num2 += 24;
                                num2 += 10;
                                if (GUI.Button(new Rect((float)num, (float)num2, 200f, 20f), "Find Internet Match"))
                                {
                                    this.manager.matchMaker.ListMatches(0, 20, string.Empty, false, 0, 0, new NetworkMatch.DataResponseDelegate<List<MatchInfoSnapshot>>(this.manager.OnMatchList));
                                }
                                num2 += 24;
                            }
                            else
                            {
                                for (int i = 0; i < this.manager.matches.Count; i++)
                                {
                                    MatchInfoSnapshot matchInfoSnapshot = this.manager.matches[i];
                                    if (GUI.Button(new Rect((float)num, (float)num2, 200f, 20f), "Join Match:" + matchInfoSnapshot.name))
                                    {
                                        this.manager.matchName = matchInfoSnapshot.name;
                                        this.manager.matchMaker.JoinMatch(matchInfoSnapshot.networkId, string.Empty, string.Empty, string.Empty, 0, 0, new NetworkMatch.DataResponseDelegate<MatchInfo>(this.manager.OnMatchJoined));
                                    }
                                    num2 += 24;
                                }
                                if (GUI.Button(new Rect((float)num, (float)num2, 200f, 20f), "Back to Match Menu"))
                                {
                                    this.manager.matches = null;
                                }
                                num2 += 24;
                            }
                        }
                        if (GUI.Button(new Rect((float)num, (float)num2, 200f, 20f), "Change MM server"))
                        {
                            this.m_ShowServer = !this.m_ShowServer;
                        }
                        if (this.m_ShowServer)
                        {
                            num2 += 24;
                            if (GUI.Button(new Rect((float)num, (float)num2, 100f, 20f), "Local"))
                            {
                                this.manager.SetMatchHost("localhost", 1337, false);
                                this.m_ShowServer = false;
                            }
                            num2 += 24;
                            if (GUI.Button(new Rect((float)num, (float)num2, 100f, 20f), "Internet"))
                            {
                                this.manager.SetMatchHost("mm.unet.unity3d.com", 443, true);
                                this.m_ShowServer = false;
                            }
                            num2 += 24;
                            if (GUI.Button(new Rect((float)num, (float)num2, 100f, 20f), "Staging"))
                            {
                                this.manager.SetMatchHost("staging-mm.unet.unity3d.com", 443, true);
                                this.m_ShowServer = false;
                            }
                        }
                        num2 += 24;
                        GUI.Label(new Rect((float)num, (float)num2, 300f, 20f), "MM Uri: " + this.manager.matchMaker.baseUri);
                        num2 += 24;
                        if (GUI.Button(new Rect((float)num, (float)num2, 200f, 20f), "Disable Match Maker"))
                        {
                            this.manager.StopMatchMaker();
                        }
                        num2 += 24;
                    }
                }
            }
        }
    }

🔚